home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Collection of Tools & Utilities
/
Collection of Tools and Utilities.iso
/
turbovis
/
ptg120co.zip
/
BBERROR.PAS
< prev
next >
Wrap
Pascal/Delphi Source File
|
1993-11-06
|
3KB
|
32 lines
(* This file was mangled by Mangler 1.13 (c) Copyright 1993 by Berend de Boer *)
{$IFDEF DPMI} {$S-,Q-,R-,I-,V-} {$ELSE} {$O+,F+,R-,Q-,S-,V-,I-} {$ENDIF} UNIT BBERROR ;INTERFACE USES DOS ;
CONST FATALERRORTEXT :STRING [ 128 ] ='Fatal error. Errorcode: ';VAR FERR :TEXT ;PROCEDURE DUMPSTACK (STARTFRAME :WORD );
PROCEDURE LOGERROR (CONST S :STRING );PROCEDURE INSTALLEXITHANDLER (AFILENAME :PATHSTR );IMPLEMENTATION USES OBJECTS ,
MEMORY , {$IFDEF DPMI} WINAPI , {$ENDIF} BBUTIL , BBFILE , BBGUI ;VAR O1lO11Il00lI:POINTER;OIO1OO11I1:WORD;
PROCEDURE DUMPSTACK (STARTFRAME:WORD);{$IFDEF DPMI} CONST O1l1l0Ill101=10 ;{$ENDIF} VAR {$IFDEF DPMI} OIOI10l10:WORD;
{$ENDIF} O101O01III1II:WORD;OOlIll00OOll:POINTER;OOI1llO101l1:WORD;O10OO0IIl00II:INTEGER;BEGIN IF NOT FILEOPEN (FERR
)THEN EXIT ;WRITELN (FERR , '**Stack dump**');IF STARTFRAME =0 THEN ASM {} MOV STARTFRAME, BP {} END;WRITELN (FERR ,
'startframe = ', HEXSTR (STARTFRAME ));WRITELN (FERR , 'Next frame Caller');{$IFDEF DPMI} OIOI10l10 := GETSELECTORLIMIT
(SSEG );{$ENDIF} O101O01III1II := STARTFRAME ;O10OO0IIl00II := 0 ;WHILE {$IFDEF DPMI} ((O101O01III1II MOD 2 =0 )AND
(O101O01III1II < OIOI10l10 - 4 ))OR (O10OO0IIl00II >= O1l1l0Ill101 ){$ENDIF} {$IFDEF MSDOS} O101O01III1II <> 0 {$ENDIF}
DO BEGIN ASM {} MOV BX , O101O01III1II{} MOV AX , SS : [ BX ] {} MOV CX , AX {} SHR CX , 1 {} JNC @@1 {} DEC AX {}
@@1 : {} MOV O101O01III1II, AX {} MOV AX , SS : [ BX + 2 ] {} MOV WORD PTR OOlIll00OOll, AX {}
MOV AX , SS : [ BX + 4 ] {} MOV WORD PTR OOlIll00OOll+ 2 , AX {} {} CMP AX , 0 {} JE @skip {} {$IFDEF DPMI} {} VERR AX {}
JE @getlogicalsel {} INC O10OO0IIl00II{} JMP @skip {} {$ENDIF} {} @getlogicalsel : {} MOV ES , AX {}
MOV AX , WORD PTR ES : [ 0 ] {} @skip : {} MOV OOI1llO101l1, AX {} END;{$IFDEF DPMI} WRITELN (FERR , HEXSTR
(O101O01III1II ), SPC (3 + 6 ), HEXSTR (OOI1llO101l1 ), ':', HEXSTR (PTRREC (OOlIll00OOll ). OFS ), ' (', HEXSTR (PTRREC
(OOlIll00OOll ). SEG ), ')');{$ENDIF} {$IFDEF MSDOS} WRITELN (FERR , HEXSTR (O101O01III1II ), SPC (3 + 6 ), HEXSTR
(PTRREC (OOlIll00OOll ). SEG ), ':', HEXSTR (PTRREC (OOlIll00OOll ). OFS ));{$ENDIF} END ;END ;PROCEDURE LOGERROR
(CONST S:STRING );BEGIN IF FILEOPEN (FERR )THEN WRITELN (FERR , GETDATESTR , ' ', GETTIMESTR , ' ', S );END ;
PROCEDURE OIO0OO1100O ;FAR ;VAR OIOO:WORD;OIO1OO11I1:WORD;BEGIN ASM {} MOV OIO1OO11I1, BP {} END;EXITPROC := O1lO11Il00lI
;OIOO := IORESULT ;IF EXITCODE =0 THEN BEGIN WRITELN (FERR , 'Program ended on ', GETDATESTR , ' at ', GETTIMESTR );
CLOSE (FERR );EXIT ;END ;WRITELN (FERR , 'date = ', GETDATESTR );WRITELN (FERR , 'time = ', GETTIMESTR );WRITELN (FERR ,
'Errorcode = ', EXITCODE );WRITELN (FERR , 'Erroraddr = ', HEXSTR (PTRREC (ERRORADDR ). SEG ), ':', HEXSTR (PTRREC
(ERRORADDR ). OFS ));WRITELN (FERR , 'MaxAvail = ', MAXAVAIL );WRITELN (FERR , 'MemAvail = ', MEMAVAIL );DUMPSTACK
(OIO1OO11I1 );CLOSE (FERR );APPEND (FERR );INFOBOX (FATALERRORTEXT + STRW (EXITCODE ), 0 );CLOSE (FERR );END ;
{$IFDEF DPMI} FUNCTION O1011I1OlOIO1 (OI1OIIIl0lO1:WORD):INTEGER ;FAR ;BEGIN O1011I1OlOIO1 := 1 ;END ;{$ENDIF}
PROCEDURE INSTALLEXITHANDLER (AFILENAME:PATHSTR);BEGIN O1lO11Il00lI := EXITPROC ;EXITPROC := @ OIO0OO1100O ;ASSIGN (FERR
, AFILENAME );IF NOT FILEEXIST (AFILENAME )THEN REWRITE (FERR )ELSE APPEND (FERR );WRITELN (FERR );WRITELN (FERR ,
'** Program started on ', GETDATESTR , ' at ', GETTIMESTR , ' **');{$IFDEF DPMI} HEAPERROR := @ O1011I1OlOIO1 ;{$ENDIF}
END ;END .